﻿Namespace Objects

    ''' <summary>
    ''' Stelt een rij in de lijst met verkoopsdetails voor. 
    ''' Dit komt overeen met een artikel waarvan de klant een of meerdere exemplaren koopt (of terugbrengt)
    ''' Gebruik altijd deze klasse om nieuwe verkoopsdetails aan te maken.
    ''' Vooral voor het leeggoed is het voordelig om met deze klasse te werken.
    ''' </summary>
    Public Class VerkoopsDetail

        Private _datarow As ArtikelsDataSet.VerkoopsDetailsRow

#Region "Public property's"

        Public ReadOnly Property DataRow() As ArtikelsDataSet.VerkoopsDetailsRow
            Get
                Return _datarow
            End Get
        End Property

        ''' <summary>
        ''' Omschrijving van het artikel, plus eventueel een extra omschrijving bij "Onbekend artikel"
        ''' </summary>
        Public ReadOnly Property Omschrijving() As String
            Get
                Return _datarow.VolledigeOmschrijving()
            End Get
        End Property

        Public ReadOnly Property Aantal() As Integer
            Get
                Return _datarow.Aantal
            End Get
        End Property

        Public ReadOnly Property IsLeeggoed() As Boolean
            Get
                Return _datarow.IsLeeggoed()
            End Get
        End Property

        Public ReadOnly Property IsCheque() As Boolean
            Get
                Return _datarow.IsCheque()
            End Get
        End Property

        Public ReadOnly Property IsAfgerekend() As Boolean
            Get
                Return _datarow.IsAfgerekend()
            End Get
        End Property

        ''' <summary>
        ''' Prijs. Let op: deze bevat het statiegeld als het over lege flessen of bakken gaat, 
        ''' maar niet als het over volle flessen gaat.
        ''' </summary>
        Public ReadOnly Property Prijs() As Decimal
            Get
                Return _datarow.Prijs
            End Get
        End Property

        ''' <summary>
        ''' Totale prijs inclusief statiegeld.
        ''' </summary>
        Public ReadOnly Property TotaalPrijs() As Decimal
            Get
                ' Let op: het veld "Totaal" in de datatable moet eerst ingevuld zijn, dit gebeurt niet automatisch!
                '         dit kan eventueel met behulp van HerberekenTotaalEnStatiegeld
                ' TotaalStatiegeld wordt in de datatable wel automatisch berekend als StatiegeldEuro * Aantal
                Return _datarow.Totaal + _datarow.TotaalStatiegeld
            End Get
        End Property

        Public ReadOnly Property PrijsZonderStatiegeld() As Decimal
            Get
                If (IsLeeggoed()) Then
                    ' bij leeggoed bevat _datarow.Prijs alleen maar statiegeld (is dit nog zo???)
                    Return 0D
                Else
                    Return _datarow.Prijs
                End If
            End Get
        End Property

        Public ReadOnly Property TotaalPrijsZonderStatiegeld() As Decimal
            Get
                Return PrijsZonderStatiegeld * Aantal
            End Get
        End Property

        Public ReadOnly Property AfTeDrukkenStatiegeldPerStuk() As Decimal
            Get
                Return _datarow.StatiegeldEuro
            End Get
        End Property

        Public ReadOnly Property TotaalAfTeDrukkenStatiegeld() As Decimal
            Get
                Return _datarow.TotaalStatiegeld  ' wordt in de datatable berekend als StatiegeldEuro * Aantal
                ' let op: bij leeggoed is dit het totale bedrag en is _datarow.Totaal gelijk aan 0
            End Get
        End Property

        Public ReadOnly Property BTW() As Single
            Get
                Return _datarow.BTW
            End Get
        End Property

        Public ReadOnly Property VolgnummerKlant() As Integer
            Get
                Return _datarow.VolgnummerKlant
            End Get
        End Property

        Public ReadOnly Property TotaalPrijsZonderBtw() As Decimal
            Get
                Return TotaalPrijsZonderStatiegeld * 100D / (100D + Convert.ToDecimal(BTW))
            End Get
        End Property

        Public ReadOnly Property IsBancontact() As Boolean
            Get
                Return _datarow.Bancontact
            End Get
        End Property

        Public ReadOnly Property IsMaaltijdcheque() As Boolean
            Get
                Return _datarow.Maaltijdcheque
            End Get
        End Property

        Public ReadOnly Property Barcode() As String
            Get
                Return _datarow.Barcode
            End Get
        End Property

#End Region

#Region "Constructor/initialisatie"

        Public Sub New(ByVal xdatarow As ArtikelsDataSet.VerkoopsDetailsRow)
            _datarow = xdatarow
        End Sub

        ''' <summary>
        ''' Maak een nieuw VerkoopDetail aan op basis van een artikel, de prijs en het aantal
        ''' </summary>
        ''' <param name="verkoop"></param>
        ''' <param name="artikel"></param>
        ''' <param name="prijs"></param>
        ''' <param name="aantal"></param>
        Public Sub New(ByVal verkoop As ArtikelsDataSet.VerkopenRow, ByVal artikel As ArtikelsDataSet.ArtikelsRow, _
                        ByVal prijs As Decimal, ByVal extraOmschrijving As String, ByVal aantal As Integer, ByVal volgnummerKlant As Integer)
            If (artikel.IsStatiegeldEuroNull()) Then
                artikel.StatiegeldEuro = 0D
            End If
            Dim dataset As ArtikelsDataSet = DirectCast(verkoop.Table.DataSet, ArtikelsDataSet)
            Dim verkoopsdetailsTable As ArtikelsDataSet.VerkoopsDetailsDataTable = dataset.VerkoopsDetails
            _datarow = verkoopsdetailsTable.NewVerkoopsDetailsRow()
            _datarow.VerkopenRow = verkoop
            _datarow.ArtikelsRow = artikel
            _datarow.Prijs = prijs
            _datarow.Aantal = aantal
            _datarow.Omschrijving = artikel.Omschrijving
            _datarow.ExtraOmschrijving = extraOmschrijving
            _datarow.Barcode = artikel.Barcode
            _datarow.BTW = artikel.BTW
            _datarow.Status = StatusImage.Huidig
            _datarow.VolgnummerKlant = volgnummerKlant
            ' merk op dat de _datarow niet toegevoegd wordt aan de tabel
            _datarow.HerberekenTotaalEnStatiegeld()
        End Sub

#End Region

    End Class

End Namespace
